from datetime import date
from flask import Flask as _Flask
from flask.json import JSONEncoder as _JSONEncoder

from app.libs.error_code import ServerError


class JSONEncoder(_JSONEncoder):
    '''
        1、jsonify去序列化时会把字典变为json格式，但是非字典格式时会调用default()方法，
    这个方法写了一些把部分格式转换为可以序列化的格式，但是并不是我们想要的，所有重写default()方法
        2、当python遇到不可以序列化的对象时，要单独加if进行处理，把值变为字符串
    '''
    def default(self,o):
        if hasattr(o,'keys') and hasattr(o,'__getitem__'):
            return dict(o)
        if isinstance(o,date):
            return o.strftime('%Y-%m-%d')
        raise ServerError()
class Flask(_Flask):#让flask知道用自己重写的JSONEncoder
    json_encoder = JSONEncoder
# 获取该项目下使用的第三方包
#F:\flask_api> pipreqs --use-local --encoding=utf8 --force .